<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=edge" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Document</title>
  </head>
  <body>
    <script>
      //一、 静态成员 ： static  和类有关系 和对象没有关系的成员 ，调用不需要实力化；
      // ES5 ：静态成员
      function Person(name, age) {
        this.name = name;
        this.age = age;
      }
      Person.num = 10;
      Person.fn = function () {
        console.log("fn");
      };

      // let zhangsan = new Person("张三",20)
      // let lisi = new Person("李四",21);

      console.log(Person.num);
      Person.fn();

      // ES6 : static 修饰符

      // class Person{
      //     static num = 10;
      //     constructor(name,age){
      //         this.name = name;
      //         this.age = age;
      //     }
      //     static fn(){
      //         console.log("fn");
      //     }
      // }

      // console.log(Person.num);
      // Person.fn();

      // static 的使用 ： 统计一个类被实例化了多少次；
      // let num = 0;
      // class Person{
      //     static num = 0;
      //     constructor(name,age){
      //         this.name = name;
      //         this.age = age;
      //         Person.num++;
      //         // this.num = 0;
      //         // this.num++;
      //         // num++;
      //     }
      // }
      // let zhangsan = new Person("张三",20);
      // let lisi  = new Person("李四",21);
      // console.log(Person.num);
      // console.log(num);
      // console.log(zhangsan.num);
      // console.log(lisi.num);

      // Promise.all() Promise.race()

      // 总结 静态成员 ： static  和类有关系和对象没有关系；
      // 不需要实例化调用 ，分静态属性和静态方法；

      // 二、私有成员：类的内部可以访问 类外部不能访问；
      // ES5
      // function Person(){
      //     this.name = "张三";
      //     this.age =20;
      //     // this.weight = "100kg";
      //     let _weight = "100kg";
      // }

      // let zhangsan = new Person();
      // console.log(zhangsan.name);
      // console.log(zhangsan.weight);

      // ES6 私有属性修饰符 #

      //   class Person {
      //     #weight = "100kg";
      //     constructor() {
      //       this.name = "张三";
      //       this.age = 20;
      //     }
      //     // 共有方法获取私有属性；
      //     getWeight() {
      //       console.log("体重是", this.#weight);
      //     }
      //   }

      //   let zhangnan = new Person();
      //   console.log(zhangnan.name);
      //   // console.log(zhangnan.#weight);
      //   zhangnan.getWeight();
    </script>
  </body>
</html>
